package com.batunite.livedatabinding.adapter

import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.batunite.livedatabinding.R
import com.batunite.livedatabinding.bean.LevelBean
import com.batunite.livedatabinding.BR


/**
 * author : r
 * time   : 2023/8/28 2:23 PM
 * desc   :
 */
class SelectLevelAdapter(var items: MutableList<LevelBean>) :
    RecyclerView.Adapter<SelectLevelAdapter.SelectHolder>() {

    var onItemClickListener: OnItemClickListener? = null
    interface OnItemClickListener {
        fun onItemClick(position: Int)
    }

    class SelectHolder(var binding: ViewDataBinding) : ViewHolder(binding.root) {
        /**
         * BR 变量的id值列表，类似于R。
         * setVariable() 是一个方法，用于将数据绑定表达式中的变量与特定的值进行关联。
         */
        fun bindData(item: LevelBean) {
            binding.setVariable(BR.item, item)
        }
    }

    /**
     * @return 返回的是adapter的view
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SelectHolder {
        val inflate = DataBindingUtil.inflate<ViewDataBinding>(
            LayoutInflater.from(parent.context),
            R.layout.item_level,
            parent,
            false
        )
        return SelectHolder(inflate)
    }

    override fun getItemCount(): Int = items.size

    /**
     * 数据绑定 用于绑定数据到 RecyclerView 中的每个列表项（item）。
     * 当 RecyclerView 需要显示新的列表项时，它会调用 onBindViewHolder() 方法。
     * 在此方法中，你可以通过获取数据源中的相应位置的数据，并将其绑定到对应的视图上。
     */
    override fun onBindViewHolder(holder: SelectHolder, position: Int) {
        holder.bindData(items[position])
        holder.itemView.setOnClickListener{
            onItemClickListener?.onItemClick(position)
        }
    }

}